package com.plpm.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.plpm.model.FileRecord;
import com.plpm.vo.FileRecordVO;

/**
 * 文件记录Mapper接口
 * 
 * @author PLPM Team
 * @version 1.0
 */
@Mapper
public interface FileRecordMapper {

    /**
     * 根据ID查询文件记录
     */
    FileRecordVO findById(@Param("id") Long id);

    /**
     * 根据同文件名且upload_status=1查询文件记录
     */
    FileRecordVO findSuccessRecordByFileName(@Param("fileName") String fileName);

    /**
     * 批量根据文件名查询文件记录（upload_status=1）
     */
    List<FileRecordVO> findSuccessRecordsByFileNames(@Param("fileNames") List<String> fileNames);

    /**
     * 根据项目编号查询文件记录列表
     */
    List<FileRecordVO> findByProjectNo(@Param("projectNo") String projectNo);

    /**
     * 查询所有文件记录
     */
    List<FileRecordVO> findAll();

    /**
     * 插入文件记录
     */
    int insert(FileRecord fileRecord);

    /**
     * 更新文件记录
     */
    int update(FileRecord fileRecord);

    /**
     * 根据文件名删除文件记录
     */
    int deleteByFileName(@Param("fileName") String fileName);

    /**
     * 统计文件记录数量
     */
    int count();
    
    /**
     * 批量插入文件记录
     */
    int batchInsert(@Param("list") List<FileRecord> fileRecords);
    
    /**
     * 删除所有文件记录
     */
    int deleteAll();
    
    /**
     * 批量更新文件记录
     */
    int batchUpdate(@Param("list") List<FileRecord> fileRecords);
    
    /**
     * 分页查询文件记录
     */
    List<FileRecordVO> findWithPagination(@Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 根据上传状态分页查询文件记录
     */
    List<FileRecordVO> findByUploadStatusWithPagination(@Param("uploadStatus") Integer uploadStatus, @Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 根据上传状态统计文件记录数量
     */
    int countByUploadStatus(@Param("uploadStatus") Integer uploadStatus);
    
    /**
     * 查询指定上传状态的分页文件记录（用于标签页）
     */
    List<FileRecordVO> findByUploadAndImportStatusWithPagination(@Param("uploadStatus") Integer uploadStatus,@Param("importStatus") Integer importStatus, @Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 统计指定上传状态的文件记录数量
     */
    int countByNotUploadStatus(@Param("uploadStatus") Integer uploadStatus);
    
    /**
     * 统计指定上传状态和导入状态的文件记录数量
     */
    int countByUploadAndImportStatus(@Param("uploadStatus") Integer uploadStatus, @Param("importStatus") Integer importStatus);
    
    /**
     * 查询异常文件（上传失败或上传成功但导入失败）
     */
    List<FileRecordVO> findErrorFilesWithPagination(@Param("importStatus") Integer importStatus, @Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 统计异常文件数量
     */
    int countErrorFiles(@Param("importStatus") Integer importStatus);
    
    /**
     * 查询最新的uploadTime值
     */
    String findLatestUploadTime();
    
    /**
     * 查询指定时间之前的失败文件记录（syncStatus=2）
     */
    List<FileRecord> selectFailedFilesBeforeTime(@Param("cutoffTime") String cutoffTime);
}
